home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / data / happysrc / pcinit.c < prev    next >
Text File  |  1993-11-30  |  5KB  |  138 lines

  1. /**********************************
  2.  *                                *
  3.  *  *** HAPPy Pascal compiler *** *
  4.  *     initialize routine         *
  5.  *                                *
  6.  *   Copyright (c) H.Asano 1992   *
  7.  **********************************/
  8.  
  9. #define  EXTERN  extern
  10.  
  11. #include <signal.h>
  12. #include "pascomp.h"
  13.  
  14. static void initscalars(void) ;
  15. static void initsets(void)    ;  
  16. static void entstdtypes(void) ;
  17. extern void entstdnames(void) ;
  18. extern void entundecl  (void) ;
  19. extern int  crelabel(void)  ;
  20. extern Set  *mkset(Set*,int,...) ;
  21. extern Set  *orset(Set*,Set*) ;
  22. extern void initpcd(void) ;
  23. extern void initheap(void);
  24. extern void *Malloc(int)  ;
  25. extern void real_err(int,int) ;
  26.  
  27. void init(void)
  28. {
  29.      signal(SIGFPE,real_err) ;          /* 浮動小数点例外処理の登録   */
  30.      initheap()    ;                    /* heapメモリの初期設定       */
  31.      initscalars() ;                    /* スカラー項目の初期設定     */
  32.      initsets();                        /* symbol set の 初期設定     */
  33.      initpcd() ;                        /* P-codeの初期設定           */
  34.  
  35.      level = 0 ;  
  36.      top   = 0 ;  
  37.      display[0].fname  = nil;
  38.      display[0].flabel = nil ;
  39.      display[0].occur  = blck ;
  40.           
  41.      entstdtypes() ;  /* 標準の型の登録  */
  42.      entstdnames() ;  /* 標準名の登録    */
  43.      entundecl  () ;  /* 未定義の名前のための事前処理 */
  44.  
  45.     level = 1 ;       /* 利用者定義の名前は水準1から始まる */
  46.     top   = 1 ;
  47.     display[1].fname  = nil;
  48.     display[1].flabel = nil ;
  49.     display[1].occur  = blck ;
  50. }
  51.  
  52. static void initscalars(void)
  53. {
  54.      defineinput  = false ;             /* input ファイル 未定義      */
  55.      defineoutput = false ;             /* outputファイル 未定義      */
  56.      errorcount = 0 ;                   /* 発見したエラー数初期化     */
  57.      lineno= 0     ;                    /* ソースの行番号初期化       */
  58.      ic    = 0     ;                    /* Pコードカウンタ 0に設定    */
  59.      lc    = outputadr + charmax  ;     /* 変数カウンタ初期設定       */
  60.      ch    = ' '   ;                    /* 読込文字初期化             */             fwptr   = nil ;                    /* 前方参照ポインタをクリア   */
  61. }
  62.  
  63. static void initsets(void)
  64. {
  65.      mkset(&constbegsys, 
  66.            addop,intconst,realconst,stringconst,ident,-1)  ;
  67.      mkset(&simptypebegsys,  lparent,-1)  ;
  68.      orset(&simptypebegsys, &constbegsys) ;
  69.      mkset(&typebegsys,
  70.            arrow,packedsy,arraysy,recordsy,setsy,filesy,-1) ;      
  71.      orset(&typebegsys, &simptypebegsys) ;
  72.      mkset(&typedels,
  73.            arraysy,recordsy,setsy,filesy,-1) ;
  74.      mkset(&blockbegsys,
  75.            labelsy,constsy,typesy,varsy,procsy,funcsy,beginsy,-1);
  76.      mkset(&selectsys,
  77.            arrow,period,lbrack,-1) ;
  78.      mkset(&facbegsys,
  79.            intconst,realconst,stringconst,ident,lparent,lbrack,notsy,nilsy,-1);
  80.      mkset(&statbegsys,
  81.            beginsy,gotosy,ifsy,whilesy,repeatsy,forsy,withsy,casesy,-1) ;
  82.      mkset(&statfolsys,
  83.            semicolon,endsy,elsesy,untilsy,-1) ;      
  84. }           
  85.  
  86. static void entstdtypes(void)
  87. {
  88.    /**** integer ****/
  89.      intptr = (stp*)Malloc(sizeof(stp)) ;
  90.      intptr->size = intsize ;
  91.      intptr->form = scalar  ;
  92.      intptr->assignflag = true ;
  93.      intptr->sf.sc.scalkind = standard ;   
  94.  
  95.   /**** real ****/
  96.      realptr = (stp*)Malloc(sizeof(stp)) ;
  97.      realptr->size = realsize ;
  98.      realptr->form = scalar   ;
  99.      realptr->assignflag = true ;
  100.      realptr->sf.sc.scalkind = standard ;
  101.  
  102.   /**** char ****/
  103.      charptr = (stp*)Malloc(sizeof(stp)) ;
  104.      charptr->size = charsize ;
  105.      charptr->form = scalar   ;
  106.      charptr->assignflag = true ;
  107.      charptr->sf.sc.scalkind = standard ;
  108.  
  109.   /**** boolean ****/
  110.      boolptr = (stp*)Malloc(sizeof(stp)) ;
  111.      boolptr->size = boolsize ;
  112.      boolptr->form = scalar   ;
  113.      boolptr->assignflag = true ;
  114.      boolptr->sf.sc.scalkind = declared ;  /* 列挙型はdeclaredである  */            
  115.  
  116.   /**** nil ****/
  117.      nilptr = (stp*)Malloc(sizeof(stp)) ;
  118.      nilptr->size = ptrsize ;
  119.      nilptr->form = pointer ;
  120.      nilptr->assignflag = true  ;
  121.      nilptr->sf.pt.eltype = nil ;
  122.          
  123.   /**** for alignment of parameters ****/
  124.      parmptr = (stp*)Malloc(sizeof(stp)) ;
  125.      parmptr->size = parmsize ;
  126.      parmptr->form = scalar ;
  127.      parmptr->assignflag = true ;
  128.      parmptr->sf.sc.scalkind = standard ;
  129.  
  130.   /**** text ****/
  131.      textptr = (stp*)Malloc(sizeof(stp)) ;
  132.      textptr->size = charsize ;
  133.      textptr->form = files    ;
  134.      textptr->assignflag = false ;
  135.      textptr->sf.fi.texttype = true ;
  136.      textptr->sf.fi.filtype  = charptr ;
  137. }
  138.